<!doctype html>
<html lang="zh-cn">
<head>

    <meta charset="utf-8">
    <meta name="generator" content="Hugo 0.57.2" />
    <meta http-equiv="X-UA-Compatible" content="IE=edge">
    <meta name="viewport" content="width=device-width, initial-scale=1">

    <title>TCP 3次握手原因讲解 | The Sky of OtsWang</title>
    <meta property="og:title" content="TCP 3次握手原因讲解 - The Sky of OtsWang">
    <meta property="og:type" content="article">
        
    <meta property="article:published_time" content="2019-03-25T10:55:13&#43;08:00">
        
        
    <meta property="article:modified_time" content="2019-03-25T10:55:13&#43;08:00">
        
    <meta name="Keywords" content="golang,go语言,otswang,java,博客,python">
    <meta name="description" content="TCP 3次握手原因讲解">
        
    <meta name="author" content="OtsWang">
    <meta property="og:url" content="https://otswang.gitee.io/hugo/post/other/tcp_3_4/">
    <link rel="shortcut icon" href="/favicon.ico" type="image/x-icon">

    <link rel="stylesheet" href="/hugo/css/normalize.css">
    
        <link rel="stylesheet" href="/hugo/css/prism.css">
    
    <link rel="stylesheet" href="/hugo/css/style.css">
    <script type="text/javascript" src="//cdn.bootcss.com/jquery/3.2.1/jquery.min.js"></script>

    


    
    
</head>

<body>
<header id="header" class="clearfix">
    <div class="container">
        <div class="col-group">
            <div class="site-name ">
                
                    <a id="logo" href="https://otswang.gitee.io/hugo/">
                        The Sky of OtsWang
                    </a>
                
                <p class="description">擅长写HelloWorld的小小码农</p>
            </div>
            <div>
                <nav id="nav-menu" class="clearfix">
                    
                    
                    <a  href="https://otswang.gitee.io/hugo/" title="Home">Home</a>
                    
                    <a  href="https://otswang.gitee.io/hugo/tags/" title="Tags">Tags</a>
                    
                    <a  href="https://otswang.gitee.io/hugo/categories/" title="Categories">Categories</a>
                    
                    <a  href="https://otswang.gitee.io/hugo/archives/" title="Archives">Archives</a>
                    
                    <a  href="https://otswang.gitee.io/hugo/about/" title="About">About</a>
                    
                </nav>
            </div>
        </div>
    </div>
</header>


<div id="body">
    <div class="container">
        <div class="col-group">

            <div class="col-8" id="main">
                <div class="res-cons">
                    <article class="post">
                        <header>
                            <h1 class="post-title">TCP 3次握手原因讲解</h1>
                        </header>
                        <date class="post-meta meta-date">
                            2019年3月25日
                        </date>
                        
                        <div class="post-meta">
                            <span>|</span>
                            
                                <span class="meta-category"><a href="https://otswang.gitee.io/hugo/categories/other">Other</a></span>
                            
                        </div>
                        
                        
                        
                        <div class="post-content">
                            <p>网上找到一篇对于tcp三次握手原因通俗的讲解。</p>

<p>经常有人会问tcp建立连接时为什么要三次握手，两次行不行呢？不行，那可能会死人的，不信我讲个故事。</p>

<p>北宋末年，统治阶级奢靡腐败，苛捐杂税压得人们喘不过气来。一时间盗贼四起，纷纷占山为王。盗贼们时不时打家劫舍，骚扰村民，连官府都不敢轻举妄动。后来上任了一位较有作为的县官，不忍看到百姓受苦，决心围剿盗贼。但是盗贼在山头，易守难攻，他们决定兵分两路，分为东边军和西边军，从东边和西边夹击盗贼，一举拿下匪巢。可是山头太大了，县武装力量也不是太强，必须做到东边军和西边军两边同时进攻才有很大胜算，任何一方贸然进攻都会有全军覆没的危险。可是如何让驻扎在山头东边和西边的军队同时进攻呢？</p>

<p>这时军中一名高个小将杜乾说道，“这还不容易，到了某个时刻，让东头发一封飞鸽传书给西头，告知他们，东头已经准备好了，要发起进攻请求。大约半个时辰后，东头就可以发起进攻。”</p>

<p>另一名矮胖小将王颖急忙道，“你怎么知道这封请求进攻的飞鸽传书会安全到达西头，万一途中飞鸽迷路了或被贼寇拦截了怎么办，又或者安全达到，但是西头军队压根还没有准备好进攻，总之单方面发起进攻会失败的。”</p>

<p>杜乾眨了眨眼，又说道，“那就等到西头给东头的确认信之后再发起进攻，不等到西头的确认信绝不发起进攻。”</p>

<p>矮胖小将王颖，顿了顿，又道，“如此，东头军队是准备好进攻了，西头军队却未必敢发起进攻。”杜乾一脸疑惑：“为何？”</p>

<p>此时军师吴亮摇着鹅毛扇，哈哈大笑道，“这位王颖将军果然心思缜密。东头发起飞鸽传书，告知西头一切准备就绪，可以发起进攻了。如果东头收到了西头的回复，东头发起了进攻，西头正好一起响应，准能打得贼寇落花流水。万一西头的回复信丢失，东头的军队等不到西头的回复，不知道是请求信根本没有送达到西头，还是送达到了西头后，西头给他们的回复信在路上丢失了，总之他们是不会单方面发起进攻的。而西头军队对他们的回复信是否安全到达东头，他们是不知道的。如果真的不幸丢失了，西头单方面发起了进攻，而东头又不知道，岂不失败了。所以他们怎敢轻举妄动呢？”</p>

<p>大家听后，纷纷对军师点头赞同。那杜乾又道，“究竟如何能让西头放心地发起进攻，确保万无一失？”</p>

<p>军师吴亮又接着说，“收到西头回复信之后，可以再写一封确认信知会西头那边。西头收到这封确认的确认信之后，就知道东头已经知道西头作好进攻准备了。这时候西头就可以放心发起进攻了。”“是否需要再次收到西头的信，东头才发起进攻呢？” 杜乾又说道。</p>

<p>只见王颖微微一笑，说道，“这个担心是多余的了。西头第二次收到东头的消息，证明东头也已经知道西头那边准备好了，而东头是主动发起进攻请求的，肯定是准备好了的。也就是说，东头准备好了，西头知道东头准备好了，最重要的是西头也知道东头知道西头准备好了，所以双方可以放心发起进攻了。” 如下图所示：</p>

<p><img src="https://upload-images.jianshu.io/upload_images/9444378-1feb30d9901d53e7.png" alt="示意图" /></p>

<p>军师会心的点了点头，说道，“如此，你们开始部署吧，誓要做到夹击成功，则贼寇可破矣。”</p>

<p>故事讲完了。可是TCP三次握手和上面的故事有区别：TCP发起建立连接的一方不会一直等待对方的回复，如果超时，他再次发起这个请求直至放弃，然后释放资源。假设最后一次的请求送达到了对方B，而此时请求方A已经释放连接，而B是不知道的。本来这是一个早已失效的报文段。但B收到此失效的连接请求报文段后，就误认为A发出了一次新的连接请求。于是又向A发出确认报文段，同意建立连接。假定不采用三次握手，那么只要B发出确认，新的连接就建立了。 由于现在A已经释放连接，因此不会理会B的确认，也不会向B发送数据。 但B却以为新的运输连接已经建立了，并一直等待A发来数据。 B的许多资源就这样浪费了。采用三次握手的方法可以防止上述异常现象的发生。</p>

<h2 id="本文来源">本文来源：</h2>

<p>作者：Shonm
来源：CSDN
原文：<a href="https://blog.csdn.net/zxm342698145/article/details/81318198">https://blog.csdn.net/zxm342698145/article/details/81318198</a></p>

<blockquote>
<p>参考资料 <a href="https://blog.csdn.net/lengxiao1993/article/details/82771768">https://blog.csdn.net/lengxiao1993/article/details/82771768</a></p>
</blockquote>
                        </div>

                        


                        


                        <div class="post-meta meta-tags">
                            
                            <ul class="clearfix">
                                
                                <li><a href="https://otswang.gitee.io/hugo/tags/tcp">tcp</a></li>
                                
                            </ul>
                            
                        </div>
                    </article>
                    
    

    
    
                </div>
            </div>
            <div id="secondary">

    <section class="widget">
        <form id="search" action="//www.google.com/search" method="get" accept-charset="utf-8" target="_blank" _lpchecked="1">
      
      <input type="text" name="q" maxlength="20" placeholder="Search">
      <input type="hidden" name="sitesearch" value="https://otswang.gitee.io/hugo/">
      <button type="submit" class="submit icon-search"></button>
</form>
    </section>

    

    <section class="widget">
        <h3 class="widget-title">最近文章</h3>
<ul class="widget-list">
    
    <li>
        <a href="https://otswang.gitee.io/hugo/post/middle_tools/kafka/" title="Kafka">Kafka</a>
    </li>
    
    <li>
        <a href="https://otswang.gitee.io/hugo/post/middle_tools/zk_starter/" title="Zookeeper Starter">Zookeeper Starter</a>
    </li>
    
    <li>
        <a href="https://otswang.gitee.io/hugo/post/java/javafx_starter/" title="Java Fx 入门学习">Java Fx 入门学习</a>
    </li>
    
    <li>
        <a href="https://otswang.gitee.io/hugo/post/other/codec/" title="常用加密/签名算法">常用加密/签名算法</a>
    </li>
    
    <li>
        <a href="https://otswang.gitee.io/hugo/post/other/docker/" title="Docker学习">Docker学习</a>
    </li>
    
    <li>
        <a href="https://otswang.gitee.io/hugo/post/webapp/react_starter/" title="React 从入门到入门">React 从入门到入门</a>
    </li>
    
    <li>
        <a href="https://otswang.gitee.io/hugo/post/lang/csharpe_starter/" title="C#语言从入门到入门">C#语言从入门到入门</a>
    </li>
    
    <li>
        <a href="https://otswang.gitee.io/hugo/post/java/java8time/" title="Java checklist">Java checklist</a>
    </li>
    
    <li>
        <a href="https://otswang.gitee.io/hugo/post/other/keyboard/" title="快捷键记录">快捷键记录</a>
    </li>
    
    <li>
        <a href="https://otswang.gitee.io/hugo/post/other/vim/" title="vim 使用记录">vim 使用记录</a>
    </li>
    
</ul>
    </section>

    

    <section class="widget">
        <h3 class="widget-title">分类</h3>
<ul class="widget-list">
    
    <li>
        <a href="https://otswang.gitee.io/hugo/categories/algorithm/">algorithm(4)</a>
    </li>
    
    <li>
        <a href="https://otswang.gitee.io/hugo/categories/design/">design(7)</a>
    </li>
    
    <li>
        <a href="https://otswang.gitee.io/hugo/categories/doc/">doc(2)</a>
    </li>
    
    <li>
        <a href="https://otswang.gitee.io/hugo/categories/go/">go(3)</a>
    </li>
    
    <li>
        <a href="https://otswang.gitee.io/hugo/categories/java/">java(7)</a>
    </li>
    
    <li>
        <a href="https://otswang.gitee.io/hugo/categories/java-java8inaction/">java-java8inaction(11)</a>
    </li>
    
    <li>
        <a href="https://otswang.gitee.io/hugo/categories/java-juc/">java-juc(3)</a>
    </li>
    
    <li>
        <a href="https://otswang.gitee.io/hugo/categories/java-jvm/">java-jvm(2)</a>
    </li>
    
    <li>
        <a href="https://otswang.gitee.io/hugo/categories/java-spring/">java-spring(2)</a>
    </li>
    
    <li>
        <a href="https://otswang.gitee.io/hugo/categories/java-thinkinginjava/">java-thinkinginjava(11)</a>
    </li>
    
    <li>
        <a href="https://otswang.gitee.io/hugo/categories/middletools/">middletools(9)</a>
    </li>
    
    <li>
        <a href="https://otswang.gitee.io/hugo/categories/other/">other(24)</a>
    </li>
    
    <li>
        <a href="https://otswang.gitee.io/hugo/categories/qt/">qt(2)</a>
    </li>
    
    <li>
        <a href="https://otswang.gitee.io/hugo/categories/smallquickappweb/">smallquickappweb(4)</a>
    </li>
    
    <li>
        <a href="https://otswang.gitee.io/hugo/categories/webapp/">webapp(1)</a>
    </li>
    
    <li>
        <a href="https://otswang.gitee.io/hugo/categories/%E5%B0%8F%E4%BC%97%E8%AF%AD%E8%A8%80%E4%B8%80%E7%9E%A5/">小众语言一瞥(4)</a>
    </li>
    
</ul>
    </section>

    <section class="widget">
        <h3 class="widget-title">标签</h3>
<div class="tagcloud">
    
    <a href="https://otswang.gitee.io/hugo/tags/c/">c#</a>
    
    <a href="https://otswang.gitee.io/hugo/tags/checklist/">checklist</a>
    
    <a href="https://otswang.gitee.io/hugo/tags/codec/">codec</a>
    
    <a href="https://otswang.gitee.io/hugo/tags/docker/">docker</a>
    
    <a href="https://otswang.gitee.io/hugo/tags/elk/">elk</a>
    
    <a href="https://otswang.gitee.io/hugo/tags/emmet/">emmet</a>
    
    <a href="https://otswang.gitee.io/hugo/tags/file/">file</a>
    
    <a href="https://otswang.gitee.io/hugo/tags/freemarker/">freemarker</a>
    
    <a href="https://otswang.gitee.io/hugo/tags/git/">git</a>
    
    <a href="https://otswang.gitee.io/hugo/tags/go/">go</a>
    
    <a href="https://otswang.gitee.io/hugo/tags/http/">http</a>
    
    <a href="https://otswang.gitee.io/hugo/tags/interview/">interview</a>
    
    <a href="https://otswang.gitee.io/hugo/tags/java/">java</a>
    
    <a href="https://otswang.gitee.io/hugo/tags/javascript/">javascript</a>
    
    <a href="https://otswang.gitee.io/hugo/tags/juc/">juc</a>
    
    <a href="https://otswang.gitee.io/hugo/tags/jvm/">jvm</a>
    
    <a href="https://otswang.gitee.io/hugo/tags/keyboard/">keyboard</a>
    
    <a href="https://otswang.gitee.io/hugo/tags/linux/">linux</a>
    
    <a href="https://otswang.gitee.io/hugo/tags/lua/">lua</a>
    
    <a href="https://otswang.gitee.io/hugo/tags/manjaro/">manjaro</a>
    
    <a href="https://otswang.gitee.io/hugo/tags/map/">map</a>
    
    <a href="https://otswang.gitee.io/hugo/tags/markdown/">markdown</a>
    
    <a href="https://otswang.gitee.io/hugo/tags/mq/">mq</a>
    
    <a href="https://otswang.gitee.io/hugo/tags/mybatis/">mybatis</a>
    
    <a href="https://otswang.gitee.io/hugo/tags/mycat/">mycat</a>
    
    <a href="https://otswang.gitee.io/hugo/tags/mysql/">mysql</a>
    
    <a href="https://otswang.gitee.io/hugo/tags/nginx/">nginx</a>
    
    <a href="https://otswang.gitee.io/hugo/tags/qt/">qt</a>
    
    <a href="https://otswang.gitee.io/hugo/tags/react/">react</a>
    
    <a href="https://otswang.gitee.io/hugo/tags/redis/">redis</a>
    
    <a href="https://otswang.gitee.io/hugo/tags/rust/">rust</a>
    
    <a href="https://otswang.gitee.io/hugo/tags/spring/">spring</a>
    
    <a href="https://otswang.gitee.io/hugo/tags/springboot/">springboot</a>
    
    <a href="https://otswang.gitee.io/hugo/tags/stream/">stream</a>
    
    <a href="https://otswang.gitee.io/hugo/tags/tcp/">tcp</a>
    
    <a href="https://otswang.gitee.io/hugo/tags/thymeleaf/">thymeleaf</a>
    
    <a href="https://otswang.gitee.io/hugo/tags/tree/">tree</a>
    
    <a href="https://otswang.gitee.io/hugo/tags/uml/">uml</a>
    
    <a href="https://otswang.gitee.io/hugo/tags/vim/">vim</a>
    
    <a href="https://otswang.gitee.io/hugo/tags/vlang/">vlang</a>
    
    <a href="https://otswang.gitee.io/hugo/tags/vue/">vue</a>
    
    <a href="https://otswang.gitee.io/hugo/tags/zookeeper/">zookeeper</a>
    
    <a href="https://otswang.gitee.io/hugo/tags/%E4%BD%8D%E8%BF%90%E7%AE%97/">位运算</a>
    
    <a href="https://otswang.gitee.io/hugo/tags/%E5%8D%8F%E8%AE%AE/">协议</a>
    
    <a href="https://otswang.gitee.io/hugo/tags/%E5%A4%9A%E7%BA%BF%E7%A8%8B/">多线程</a>
    
    <a href="https://otswang.gitee.io/hugo/tags/%E5%B9%B6%E5%8F%91%E9%9B%86%E5%90%88/">并发集合</a>
    
    <a href="https://otswang.gitee.io/hugo/tags/%E5%BE%AE%E4%BF%A1%E5%B0%8F%E7%A8%8B%E5%BA%8F/">微信小程序</a>
    
    <a href="https://otswang.gitee.io/hugo/tags/%E5%BF%AB%E5%BA%94%E7%94%A8/">快应用</a>
    
    <a href="https://otswang.gitee.io/hugo/tags/%E6%97%B6%E9%97%B4%E7%B1%BB/">时间类</a>
    
    <a href="https://otswang.gitee.io/hugo/tags/%E6%A8%A1%E6%9D%BF%E5%BC%95%E6%93%8E/">模板引擎</a>
    
    <a href="https://otswang.gitee.io/hugo/tags/%E7%AE%97%E6%B3%95/">算法</a>
    
    <a href="https://otswang.gitee.io/hugo/tags/%E7%BC%96%E7%A8%8B/">编程</a>
    
    <a href="https://otswang.gitee.io/hugo/tags/%E7%BC%96%E7%A8%8B%E8%A7%84%E8%8C%83/">编程规范</a>
    
    <a href="https://otswang.gitee.io/hugo/tags/%E8%AE%BE%E8%AE%A1/">设计</a>
    
    <a href="https://otswang.gitee.io/hugo/tags/%E8%AE%BE%E8%AE%A1%E6%A8%A1%E5%BC%8F/">设计模式</a>
    
    <a href="https://otswang.gitee.io/hugo/tags/%E9%99%90%E6%B5%81/">限流</a>
    
    <a href="https://otswang.gitee.io/hugo/tags/%E9%9D%A2%E5%90%91%E5%AF%B9%E8%B1%A1/">面向对象</a>
    
    <a href="https://otswang.gitee.io/hugo/tags/%E9%9D%A2%E8%AF%95/">面试</a>
    
</div>
    </section>

    

    <section class="widget">
        <h3 class="widget-title">其它</h3>
        <ul class="widget-list">
            <li><a href="https://otswang.gitee.io/hugo/index.xml">文章 RSS</a></li>
        </ul>
    </section>

    

</div>
        </div>
    </div>
</div>
<footer id="footer">
    <div class="container">
        &copy; 2020 <a href="https://otswang.gitee.io/hugo/">The Sky of OtsWang By OtsWang</a>.
        Powered by <a rel="nofollow noreferer noopener" href="https://gohugo.io" target="_blank">Hugo</a>.
        <a href="https://www.flysnow.org/" target="_blank">Theme</a> based on <a href="https://github.com/Dudiao137/maupassant-hugo" target="_blank">maupassant-ots</a>.
        
    </div>
</footer>


    <script type="text/javascript">
    
    (function(){
        $("pre code").parent().addClass("line-numbers")
    }())

    window.MathJax = {
        tex2jax: {
            inlineMath: [ ['$','$'] ],
            processEscapes: true
        }
    };
    </script>
    <script type="text/javascript" src="/hugo/js/prism.js" async="true"></script>
    <script src='https://cdnjs.cloudflare.com/ajax/libs/mathjax/2.7.5/MathJax.js?config=TeX-MML-AM_CHTML' async></script>

<a id="rocket" href="#top"></a>
<script type="text/javascript" src="/hugo/js/totop.js?v=0.0.0" async=""></script>







 
 <script src="https://mermaidjs.github.io/scripts/mermaid.min.js"></script>
 <script>
       mermaid.initialize({ startOnLoad: true });
 </script>
</body>
</html>
